home *** CD-ROM | disk | FTP | other *** search
/ Risc World 5 / Risc World 5.iso / SOFTWARE / Issue5 / PD / DIRSYNC / LegalStuff / ccres / c / Filer < prev    next >
Text File  |  2004-03-20  |  3KB  |  109 lines

  1. /* Filer.c
  2.    $Id: Filer.c,v 1.2 2004/03/20 22:12:21 joty Exp $
  3.  
  4.    Copyright (c) 2003-2004 Dave Appleby / John Tytgat
  5.  
  6.    This file is part of CCres.
  7.  
  8.    CCres is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 2 of the License, or
  11.    (at your option) any later version.
  12.  
  13.    CCres is distributed in the hope that it will be useful,
  14.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.    GNU General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with CCres; if not, write to the Free Software
  20.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21.  */
  22.  
  23. #include "ccres.h"
  24.  
  25. #include <string.h>
  26.  
  27. static char achScrapFile[] = "<Wimp$Scrap>";
  28.  
  29. // user has dragged something to us from another app...
  30. void message_data_save(PDATA data)
  31. {
  32.     wimp_message * msg;
  33.  
  34.     msg = &data->poll.wb.message;
  35.     msg->your_ref = msg->my_ref;
  36.     msg->action = message_DATA_SAVE_ACK;
  37.     msg->data.data_xfer.est_size = -1;
  38.     strcpy(msg->data.data_xfer.file_name, achScrapFile);
  39.     msg->size = (offsetof(wimp_message, data.data_xfer.file_name) + sizeof(achScrapFile) + 3) & ~3;
  40.     wimp_send_message(wimp_USER_MESSAGE, msg, msg->sender);
  41.     data->fUnsafeLoad = TRUE;
  42. }
  43.  
  44.  
  45. // user has dragged something to us from a filer window...
  46. void message_data_load(PDATA data)
  47. {
  48.     wimp_message * msg;
  49.     bits file_type;
  50.  
  51.     msg = &data->poll.wb.message;
  52. LOG(("message_data_load type=%d name=%s", msg->data.data_xfer.file_type, msg->data.data_xfer.file_name));
  53.     if ((file_type = msg->data.data_xfer.file_type) == osfile_TYPE_TEXT || file_type == osfile_TYPE_RESOURCE || file_type == osfile_TYPE_TEMPLATE) {
  54.         if (load_file(data, msg->data.data_xfer.file_name, file_type)) {
  55.             saveas_set_file_type(0, data->idSaveAs, data->nFiletypeOut);
  56.             saveas_set_file_size(0, data->idSaveAs, -1);
  57.             toolbox_show_object(0, data->idSaveAs, toolbox_POSITION_AT_POINTER, NULL, data->idBaricon, toolbox_NULL_COMPONENT);
  58.         }
  59.     } else {
  60.         error("Filetype must be Text (fff), Resource (fae) or Template (fec)");
  61.     }
  62.     if (data->fUnsafeLoad) {
  63.         my_osfile_delete(achScrapFile);
  64.         data->fUnsafeLoad = FALSE;
  65.     }
  66.     msg = &data->poll.wb.message;
  67.     msg->your_ref = msg->my_ref;
  68.     msg->action = message_DATA_LOAD_ACK;
  69.     wimp_send_message(wimp_USER_MESSAGE, msg, msg->sender);
  70. }
  71.  
  72.  
  73. BOOL load_file(PDATA data, PSTR pszPath, bits nFiletype)
  74. {
  75.     PSTR pszIn;
  76.     int cbIn;
  77.  
  78.     data->nFiletypeIn = nFiletype;
  79.     if (data->pszIn != NULL) {
  80.         MyFree(data->pszIn);
  81.     }
  82.     if ((cbIn = my_osfile_filesize(pszPath)) > 0 && (pszIn = (PSTR) MyAlloc(cbIn)) != NULL) {
  83.         if (my_osfile_load(pszPath, pszIn, cbIn) != cbIn) {
  84.             MyFree(pszIn);
  85.             return(FALSE);
  86.         }
  87.         data->pszIn = pszIn;
  88.         data->cbIn = cbIn;
  89.         if (nFiletype == osfile_TYPE_TEXT) {
  90.             strcpy(data->achTextFile, pszPath);    // for throwback
  91.             while (--cbIn >= 0) {
  92.                 if (pszIn[cbIn] == '\n') {        // replace newlines with NULLs
  93.                     pszIn[cbIn] = '\0';
  94.                 }
  95.             }
  96.             if (memcmp(pszIn, "RESF:", 5) == 0) {
  97.                 data->nFiletypeOut = osfile_TYPE_RESOURCE;
  98.             } else if (memcmp(pszIn, "Template:", 9) == 0) {
  99.                 data->nFiletypeOut = osfile_TYPE_TEMPLATE;
  100.             }
  101.         } else {
  102.             data->nFiletypeOut = osfile_TYPE_TEXT;
  103.         }
  104.         return(TRUE);
  105.     }
  106.  
  107.     return(FALSE);
  108. }
  109.